# 方法一
a = 0
b = 1
for i in range(100):
    print(b, end=" ")
    c = a
    a = b
    b = c + a

print()
print("~~~~~~~~~~~~~~~~~~~~~~~~~")
# 这个地方固定死了只能是1到100的值，可以尝试一下改成函数，给出范围，然后返回这个范围内的数列值。


# 方法二
def fib(idx):
    if idx < 2:
        return idx
    else:
        res = fib(idx - 1) + fib(idx - 2)
        return res


for i in range(1, 101):
    print(fib(i), end=" ")

print()
print("~~~~~~~~~~~~~~~~~~~~~~~~~")

# 方法三 用字典缓存已计算过的结果
fibdict = {}


def fib2(idx):
    if fibdict.get(idx):
        return fibdict.get(idx)
    else:
        if idx < 2:
            fibdict[idx] = idx
            return idx
        else:
            res = fib2(idx - 1) + fib2(idx - 2)
            fibdict[idx] = res
            return res


for i in range(1, 101):
    print(fib2(i), end=" ")

# 第三种方式相对于第二种方式，原理是一样的，而且显得更为繁琐，没有必要这样操作。而且后面在实际生产代码中
# 要尽量少用全局变量，因为你不能保证其他函数不会修改你的全局变量。